% # File Info -- bibtex.tex, Part of SDUSThesis' sample, bibtex quick start

% Version Control System Information -- Subversion, hosts on <+Google Code+>;
% $URL: http://sdusthesis.googlecode.com/svn/trunk/sample/bibtex.tex $;
% $Id: bibtex.tex 20 2012-05-13 11:24:20Z suxpert@gmail.com $;

% # Copyright (C) 2009-2012, LiTuX, All wrongs reserved.
%
%	Permission is granted to copy, distribute and/or modify this document
%	under the terms of the GNU Free Documentation License, Version 1.3
%	or any later version published by the Free Software Foundation;
%	with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
%	A copy of the license is included in the section entitled "GNU
%	Free Documentation License".
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\newcommand{\BibTeX}{\textsc{Bib}\TeX}

\chapter{\BibTeX{} 快速指南}
\echapter{\BibTeX{} quick start}
\label{ch:bibtex}
此处我们将简要介绍使用 \BibTeX{} 来管理参考文献的基础知识。

\section{Bib\TeX{} 数据库格式}
\esection{\BibTeX{} database format}
\BibTeX{} 数据库是一个纯文本文件，经常使用 \textsf{.bib} 作为文件扩展名。
为了方便进行文献管理，有很多专用软件用于处理 \BibTeX{} 数据库，比如很多人推荐的
\href{http://jabref.sourceforge.net/}{\textsf{Jabref}}，又比如很多其他文献管理
工具可以将文献“导出”为 \BibTeX{} 格式……

不过，既然是纯文本文件，成本最低的方式自然是选择一款您喜欢的编辑器，打开文件
手工编辑。接下来我们不打算介绍使用专用工具来管理文献的方法，——毕竟在一个用户
友好的图形界面下，那些项的含义和可以填什么东西是很清晰的。

选择直接手工处理文本文件的另一个好处是，我们可以明确掌握文件中的任何信息。另外，
由于很多尤其是国际知名期刊本身都会有“导出文献引用”（Export citation）类似的
功能，因而当我们熟悉 \BibTeX{} 文件的结构时便可以很方便的将导出的条目
略加修改添加到自己的数据库中，因此，简单介绍 \BibTeX{} 的格式似乎有一定的
必要。

\BibTeX{} 数据库是由若干条目（entry）组成的，每个条目的结构都很简单，例如
\footnote{由于 listings 宏包处理中文时有些问题，为了较为准确的显示代码，
示例代码中大括号与中文之间添加了空格，尽管在实际使用时不需要。}：
\lstinputlisting[firstline=6, lastline=31]{sample/refs.bib}

如上所示，任何 \BibTeX{} 条目均由 \verb|@| 引导，其后是类型标识符，
之后由大括号包括所有该条目的其他信息。\BibTeX{} 条目的类型标识符不区分大小写，
因而您写成 \verb|@BOOK| 或者 \verb|@Book| 或者 \verb|@book| 都是可以的。
在大括号内的第一个条目称为该条目的“引用名称”（citing name），是我们为了方便
记忆该条目而指定的用于标识该条目的“名字”，在一个 \LaTeX{} 项目中所用到的所有
\BibTeX{} 数据库中不能重复出现。之后的其他条目均为 \verb|key = {value},|
的形式，称为“域”（field）。每个域的值可以用英文大括号“\verb|{}|”或者双引号
“\verb|""|”包括起来，或者简单的值比如数字也可以直接置于等号后面。
\BibTeX{} 的很多域的值是以列表的形式出现，比如 author 域。列表中不同的项之间
用英文逗号“\verb|,|”或者“\verb|and|”分隔。值中如果出现特殊元素比如重音等，
\BibTeX{} 采用 \LaTeX{} 语法来表示。
跟很多高级编程语言类似，每个条目的最后一个域可以保留分隔符
“\verb|,|”而不必删掉。

\BibTeX{} 内建样式及支持的标准域有如下几种
\footnote{来自 \href{http://zh.wikipedia.org/zh-cn/BibTeX}{Wikipedia}，
宽度限制没有显示可选域，详情请参考维基百科或者 \BibTeX{} 文档}：
\begin{table}[h]
	\centering
	\captions{\BibTeX{} 内建样式}{Default entry types in \BibTeX}
	\label{tab:bibtex}
	\footnotesize
	% \begin{tabular}{!{\vrule width1pt}*{3}{c|}c!{\vrule width1pt}}
	\begin{tabular}{!{\vrule width1pt}*{2}{c|}c!{\vrule width1pt}}
		\Xhline{1pt}
		样式名称	&	描述	&	必要域	\\% &	可选域 \\
		\Xhline{0.8pt}
		article		&	期刊杂志的论文	&
		author, title, journal, year	\\
		% & volume, number, pages, month, note \\
		\hline
		book		&	公开出版的图书	&
		author/editor, title, publisher, year	\\
		% & volume/number, series, address, edition, month, note \\
		\hline
		booklet		&	无出版商或作者的图书	&
		title	\\
		% & author, howpublished, address, month, year, note \\
		\hline
		conference	&	等价于 inproceedings	&
		author, title, booktitle, year	\\
		% & editor, volume/number, series, pages, address, month, organization, publisher, note \\
		\hline
		inbook		&	书籍的一部分章节	&
		author/editor, title, chapter and/or pages, publisher, year	\\
		% & volume/number, series, type, address, edition, month, note \\
		\hline
		incollection	&	书籍中带独立标题的章节	&
		author, title, booktitle, publisher, year	\\
		% & editor, volume/number, series, type, chapter, pages, address, edition, month, note \\
		\hline
		inproceedings	&	会议论文集中的一篇	&
		author, title, booktitle, year	\\
		% & editor, volume/number, series, pages, address, month, organization, publisher, note \\
		\hline
		manual	&	技术文档	&
		title	\\
		% & author, organization, address, edition, month, year, note \\
		\hline
		mastersthesis	&	硕士论文	&
		author, title, school, year	\\
		% & type, address, month, note \\
		\hline
		misc	&	其他	&
		无	\\
		% & author, title, howpublished, month, year, note \\
		\hline
		phdthesis	&	博士论文	&
		author, title, year, school	\\
		% & address, month, keywords, note \\
		\hline
		proceedings	&	会议论文集	&
		title, year	\\
		% & editor, volume/number, series, address, month, organization, publisher, note \\
		\hline
		techreport	&	教育，商业机构的技术报告	&
		author, title, institution, year	\\
		% & type, number, address, month, note \\
		\hline
		unpublished	&	未出版的论文，图书	&
		author, title, note	\\
		% & month, year \\
		\Xhline{1pt}
	\end{tabular}
\end{table}

在 \SDUSThesis{} 中，我们采用 biblatex 来处理参考文献。
同 natbib 等类似宏包相比，biblatex 提供了更加 \LaTeX{} 的方式来处理，
并且更具有灵活性。由于 \BibTeX{} 内建样式不够丰富，或许无法满足更加丰富的要求，
于是 biblatex 在此基础上进行了扩充，支持更加多样化的样式支持。详情请参阅
biblatex 文档 \S~2: Database Guide。

\section{使用方法}
\esection{Usage}
下面我们简要介绍如何使用 \BibTeX{} 为我们的文章或书籍添加参考文献列表。

上一节中我们介绍了 \BibTeX{} 数据库的格式，在实际应用时，我们可以每次读过某文献
之后，便将该文献添加到一个私人的 \BibTeX{} 数据库中，或者依个人爱好，也可以
按照文献分类添加到某个类别的数据库中供以后写作时调用。

写作时，例如采用 biblatex 来处理，则首先在主控文档的导言区引入宏包：
\begin{lstlisting}
\usepackage[style=xxx, ...]{biblatex}
\end{lstlisting}
并可以通过 \verb|\ExecuteBibliographyOptions{}| 做相关设置。针对
\SDUSThesis{}，我们已经做了相关设置所以很多情况下不需要再进行其他设定，直接
开始下一步操作即可。

之后我们需要告知 biblatex 我们的数据库在哪里。这可以通过在导言区添加
\begin{lstlisting}
\addbibresource{xxx}
\end{lstlisting}
来完成，其中 \verb|xxx| 是您的 \BibTeX{} 数据库的名称（如果不在当前路径，
需要指定相对路径或绝对路径）。如果您有多个 \BibTeX{} 数据库需要添加，
这个命令可以多次使用。

之后的正文中，便可以通过 \verb|\cite{xxx}| 等命令来引用上文添加过的数据库中的
任何条目。这里引用的 \verb|xxx| 便是上一节提到的“引用名称”（citing name），
用于唯一确定是哪个条目。例如，这里使用一条 \verb|\cite{mine}| 命令，
便得到了这样的结果：\cite{mine}。注意到我们在写作时一直没有使用数字编号，
而最后得到的结果是正确编号的，——这便是自动处理的好处。

这里出现的编号的值并不取决于该条目在 \BibTeX{} 数据库中的序号，而是取决于我们
采用哪种引用格式（bibliography style），以及该条目的首次引用顺序（对于顺序编号）
或者所有引用条目的某种排序（比如，作者--年）。因此，由于写作过程中可能会随时
添加删除移动段落，可能造成引用增减和顺序变化，如果人工管理序号将会非常麻烦并且
很难保证不出现错误。这也是我们不采用 \verb|thebibliography| 环境的重要原因。

再然后，在我们希望显示参考文献的地方，使用命令
\footnote{对于每章单独列出文献的处理方法，请详细阅读 biblatex 的文档。}
\begin{lstlisting}
\printbibliography
\end{lstlisting}

之后，我们知道为了生成最后的 pdf 文档，需要在主控文档上执行 latex 程序，由于
此时引入了 \BibTeX{} 数据库，因此需要某些改动。鉴于 \SDUSThesis{} 建议采用
xelatex 来处理，下面我们以 xelatex 为例来进行说明。

首先需要对主控文档运行 xelatex，此时 xelatex 会将文中所有 \verb|\cite{}| 命令
中使用到的引用名称记录在 \verb|.aux| 文件中，并且在生成的 pdf 文件中以占位符
代替将来产生的数字，在运行日志和终端输出中，xelatex 提示引用没有定义。

之后，需要对生成的 aux 文件运行 bibtex 或者 biber 程序，bibtex/biber 会从指定的
\BibTeX{} 数据库中查找所有在 aux 文件中记录了引用名称的条目，并且按照某种格式
将相关的信息写入 bbl 文件中，供之后 biblatex 在显示文献列表时使用。

然后再次对主控文档运行 xelatex，此时 xelatex 已经知道了那些引用的序号在哪里，
于是参考文献便插入到了 \verb|\printbibliography| 对应的位置，参考文献的处理部分
就已经完成了。然而此时由于文档内容发生了变化，xelatex 认为先前计算的交叉引用
可能会出现问题，于是提示“标签可能发生变化”，再次对主控文档运行 xelatex 即可。

综上，一般而言整个过程需要执行以下四个步骤
（以主控文档叫 thesis 为例，\verb|$| 表示终端提示符。）
当然，由于很多人使用 WinEdt 之类类似 IDE 的编辑器，可以在上面分别点击对应的按钮
来完成这四个步骤。
\begin{lstlisting}
$ xelatex thesis
$ bibtex thesis
$ xelatex thesis
$ xelatex thesis
\end{lstlisting}

我们的例子文档由于在宏包开发中有若干复杂的依赖关系，因而我们使用 \verb|Makefile|
来管理，熟悉 GNU make 的同学可以参考。

% vim: set ts=4 sw=4 :

